<?php
// Start session management and include necessary functions
require_once('../dao/database.php');
require_once('../dao/user_db.php');
require_once('../util/Validation.php');
require_once '../dao/KilometerEntryDAO.php';
require_once('../util/Util.php');  

session_start();

// Get the action to perform
if (isset($_POST['action'])) {
    $action = $_POST['action'];
} else if (isset($_GET['action'])) {
    $action = $_GET['action'];
} else {
    $action = 'show_entry';
}

// If the user isn't logged in, force the user to login
if (!isset($_SESSION[Constants::SESSION_ROLE])) {
    $action = 'login';
} 

// Perform the specified action
switch($action) {
    case 'login':
        header('Location: ../main/index.php?action=login');
        break;
    case 'edit_entry':
        $modus='update_Entry';
        if (isset($_GET['entry'])) {
            $val = new Validation();
            $infoMessage = '';
            $entry = intval($_GET['entry']);
            $user = $_SESSION[Constants::SESSION_USER];
            $entries = KilometerEntryDAO::getRoutesFromTo($user->getId(), $entry, 1);
            $gefahren_von  = $entries[0]->getGefahrenVon();
            $gefahren_bis = $entries[0]->getGefahrenBis();
            $gefahren_kilometer = $entries[0]->getGefahrenKilometer();
            $pinnwand_eintrag = $entries[0]->getPinnwandEintrag();
            $_SESSION[Constants::ROUTE_UPDATE_ID] = $entries[0]->getId();
            include('addEntryView.php');
            break;
        } else {
            include('entryView.php');
            break;
        }

    case 'show_entry':
        $user = $_SESSION[Constants::SESSION_USER];
        //$entries = KilometerEntryDAO::getRoutes($user['id']);
        $sumAndCount = KilometerEntryDAO::getSumAndCount($user->getId());
        $count = intval($sumAndCount[0]['count']);
        $sum = floatval($sumAndCount[0]['sum']);
        $gesamtPages = ceil($count/Constants::VAR_PAGE_SIZE);
        $newNextPage = 0;
                
        $from = 0;
        $entryIndex = 0;
        
        if (isset($_GET['page'])) {
            $nextPage = $_GET['page'];
            if (is_numeric($nextPage)){
                if (intval($nextPage) >= 0){ 
                        if ( intval($nextPage) < $gesamtPages ){
                            $from = $nextPage * Constants::VAR_PAGE_SIZE;
                            $entryIndex = $from;

//                            if ($from == 1){
//                                $from = 0;
//                            }
                            $newNextPage = $nextPage;
                        }
                }
            }
        }
        $entries = KilometerEntryDAO::getRoutesFromTo($user->getId(), $from, Constants::VAR_PAGE_SIZE);
        
        include('entryView.php');
        break;
    case 'add_entry':
        $val = new Validation();
        $modus='new_Entry';
        $infoMessage = '';
        include('addEntryView.php');
        break;
    case 'new_Entry':
        $val = new Validation();
        $infoMessage = '';
        $modus='new_Entry';
        if (isset($_POST['submit'])) {
            /*
            * Validation Statigie mit command pattern hinzufügen.
            */
            // Profildaten aus $_POST auslesen
            $gefahren_von = $val->validateRequiredString('gefahren_von', "'Datum von' ist ein Pflichtfeld.");
            $gefahren_bis = $val->validateRequiredString('gefahren_bis', "'Datum bis' ist ein Pflichtfeld.");
            $gefahren_kilometer = $val->validateRequiredString('gefahren_kilometer', "Die gefahrenen Kilometer sind ein Pflichtfeld.");
            $gefahren_kilometer = $val->isKilometerEntry($gefahren_kilometer, 'Der Format für die gefahrenen Kilometer sollte z.B. \'12\' oder \'14.5\' sein');
            $val->isDateFormat($gefahren_von, 'Das Datumsformat ist falsch! (Bsp. 27.09.2011)');
            $val->isDateFormat($gefahren_bis, 'Das Datumsformat ist falsch! (Bsp. 27.09.2011)');
            $pinnwand_eintrag = $val->validateString('pinnwand_eintrag');
            $val->validateDateAfter($gefahren_von, $gefahren_bis, 'Das \'von\' Datum sollte vor den \'bis\' Datum sein!');
            $val->DateNotOlderThan($gefahren_von, Constants::VAR_OLD, 'Einträge dürfen nicht älter als '.Constants::VAR_OLD.' Tage sein.');
            //$val->isDateInFuture($gefahren_von, 'Der Eintrag sollte nicht in der Zukunft sein.');
            $val->isDateInFuture($gefahren_bis, 'Der Eintrag sollte nicht in der Zukunft sein.');
            $user = $_SESSION[Constants::SESSION_USER];
            
            //Wenn jetzt schon Fehler -> DB Validierung nicht mehr durchführen
            if (!$val->isError()) {

                $valResults = KilometerEntryDAO::checkOuterEntries($gefahren_von, $gefahren_bis, $user->getId());
                if (count($valResults) > 0){
                    $val->addError("Es existieren bereits Einträge im Zeitraum. Bitte überprüfen Sie den Eintrag vom ".$valResults[0]['eintrag_von'].".");
                }
            }
                        
            if (!$val->isError()) {
                KilometerEntryDAO::saveRoute($gefahren_von,
                                             $gefahren_bis,
                                             $gefahren_kilometer, 
                                             $pinnwand_eintrag,
                                             $user->getId());
                header('Location: .?action=show_entry');
                break;
            }
            include('addEntryView.php');
            break;
        }
        include('addEntryView.php');
        break;

    case 'update_Entry':
        $val = new Validation();
        $infoMessage = '';
        $modus='update_Entry';
        if (isset($_POST['submit'])) {
            /*
            * Validation Statigie mit command pattern hinzufügen.
            */
            // Profildaten aus $_POST auslesen
            $gefahren_von = $val->validateRequiredString('gefahren_von', "'Datum von' ist ein Pflichtfeld.");
            $gefahren_bis = $val->validateRequiredString('gefahren_bis', "'Datum bis' ist ein Pflichtfeld.");
            $gefahren_kilometer = $val->validateRequiredString('gefahren_kilometer', "Die gefahrenen Kilometer sind ein Pflichtfeld.");
            $gefahren_kilometer = $val->isKilometerEntry($gefahren_kilometer, 'Der Format für die gefahrenen Kilometer sollte z.B. \'12\' oder \'14.5\' sein');
            $val->isDateFormat($gefahren_von, 'Das Datumsformat ist falsch! (Bsp. 27.09.2011)');
            $val->isDateFormat($gefahren_bis, 'Das Datumsformat ist falsch! (Bsp. 27.09.2011)');
            $pinnwand_eintrag = $val->validateString('pinnwand_eintrag');
            $val->validateDateAfter($gefahren_von, $gefahren_bis, 'Das \'von\' Datum sollte vor den \'bis\' Datum sein!');
            $val->dateNotOlderThan($gefahren_von, Constants::VAR_OLD, 'Einträge dürfen nicht älter als '.Constants::VAR_OLD.' Tage sein.');
            $val->isDateInFuture($gefahren_von, 'Der Eintrag sollte nicht in der Zukunft sein.');
            $val->isDateInFuture($gefahren_bis, 'Der Eintrag sollte nicht in der Zukunft sein.');
            $user = $_SESSION[Constants::SESSION_USER];
            
            //Wenn jetzt schon Fehler -> DB Validierung nicht mehr durchführen
            if (!$val->isError()) {
                if (isset($_SESSION[Constants::ROUTE_UPDATE_ID])) {
                    $routeUpdateId = $_SESSION[Constants::ROUTE_UPDATE_ID];
                    //$_SESSION[Constants::ROUTE_UPDATE_ID] = "";
                    $valResults = KilometerEntryDAO::checkOuterEntriesForUpdate($gefahren_von, $gefahren_bis, $user->getId(), $routeUpdateId);
                } else {
                    $val->addError('Es ist ein interner Fehler aufgetreten. Bitte versuchen Sie es erneut.');
                }
                if (count($valResults) > 0){
                    $val->addError("Es existiert bereits einen Eintrag im Zeitraum. Bitte überprüfen Sie den Eintrag vom ".$valResults[0]['eintrag_von'].".");
                }
            }
                        
            if (!$val->isError()) {
                    KilometerEntryDAO::updateRoute( $gefahren_von,
                                                    $gefahren_bis,
                                                    $gefahren_kilometer, 
                                                    $pinnwand_eintrag,
                                                    $user->getId(),
                                                    $routeUpdateId
                                                    );
                header('Location: .?action=show_entry');
                break;
            }
            include('addEntryView.php');
            break;
        }
        include('addEntryView.php');
        break;
    case 'logout':
        $_SESSION = array();   // Clear all session data from memory
        session_destroy();     // Clean up the session ID
        $login_message = 'You have been logged out.';
        include('../main/homeView.php');
        break;
}
?>